home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
graphics
/
3dvect37.zip
/
MORE.INC
< prev
next >
Wrap
Text File
|
1994-06-22
|
14KB
|
405 lines
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
;
; Filename : More.inc
; Included from: 3D1.ASM, 3D2.ASM, 3D3.ASM
; Description : Irq palette fading routines
;
; Written by: John McCarthy
; 1316 Redwood Lane
; Pickering, Ontario.
; Canada, Earth, Milky Way (for those out-of-towners)
; L1X 1C5
;
; Internet/Usenet: BRIAN.MCCARTHY@CANREM.COM
; Fidonet: Brian McCarthy 1:229/15
; RIME/Relaynet: ->CRS
;
; Home phone, (905) 831-1944, don't call at 2 am eh!
;
; John Mccarthy would really love to work for a company programming Robots
; or doing some high intensive CPU work. Hint. Hint.
;
; Send me your protected mode source code!
; Send me your Objects!
; But most of all, Send me a postcard!!!!
;
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
public _slidebytes ; TRAN's slide byte routine
public _slidewords ; slide word routine
public _fade_all ; fade palette to a common colour
public _fade_palette ; fade from esi to edi
public _palette1 ; temp storage palettes (768 bytes each)
public _palette2
public _sourcepal
public _destpal
public _fadestep
public _fadestatus
public _fade_palette_read; fade from current palette to pal at ESI
public _wait_for_fade ; wait for irq fade to complete
public _get_palette ; get palette from video card
public _put_palette ; put palette to video card
public _default_palette ; palette for DOS
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Slide a block of bytes closer to another block in value
; In:
; BL - max value to slide by (usually 1)
; ECX - number of bytes to slide
; ESI - block to slide towards
; EDI - block to slide
; Out:
; CF=1 - no changes made
; CF=0 - at least one change made
; Notes: Routine courtesy of TRAN from HELL.EXE
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_slidebytes:
pushad
xor bh,bh
slidebytesml:
mov al,[edi]
mov ah,[esi]
cmp al,ah
je short slidebytesmlc
mov bh,1
jb short slidebytesmlf0
sub ah,al
neg ah
cmp ah,bl
jbe short slidebytesmlf2
mov ah,bl
slidebytesmlf2:
neg ah
jmp short slidebytesmlf1
slidebytesmlf0:
sub ah,al
cmp ah,bl
jbe short slidebytesmlf1
mov ah,bl
slidebytesmlf1:
add al,ah
mov [edi],al
slidebytesmlc:
inc edi
inc esi
loop slidebytesml
sub bh,1
popad
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Slide a block of words closer to another block in value
; In:
; BX - max value to slide by (1 = really slow slide)
; ECX - number of words to slide
; ESI - block to slide towards
; EDI - block to slide
; Out:
; CF=1 - no changes made
; CF=0 - at least one change made
; Notes: Idea courtesy of TRAN from _slidebytes
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_slidewords:
pushad
xor dh,dh
slidewordsml:
mov ax,[edi]
mov bp,[esi]
cmp ax,bp
je short slidewordsmlc
mov dh,1
jb short slidewordsmlf0
sub bp,ax
neg bp
cmp bp,bx
jbe short slidewordsmlf2
mov bp,bx
slidewordsmlf2:
neg bp
jmp short slidewordsmlf1
slidewordsmlf0:
sub bp,ax
cmp bp,bx
jbe short slidewordsmlf1
mov bp,bx
slidewordsmlf1:
add ax,bp
mov [edi],ax
slidewordsmlc:
add edi,2
add esi,2
loop slidewordsml
sub dh,1
popad
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Data for IRQ controlled palette fading routines
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
number_of_colours equ 256
_palette1 db number_of_colours*3 dup (0)
_palette2 db number_of_colours*3 dup (0)
_sourcepal dd 0
_destpal dd 0
_fadestep dd 0
_fadestatus db 0
fadecount db 0
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; _Fade_palette_read: IRQ Fade from current palette to new palette at ESI
; In:
; ESI = palette to fade to
; BH - how much to fade each pel (usually 1)
; BL - how often should fade be applied (255 = every IRQ)
; Out: null
; Notes: takes control of _irqcontrol2
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_fade_palette_read:
mov _irqcontrol2,offset _ret ; just in case we are already doing a fade
mov _fadestep,ebx
mov edi,offset _palette2 ; get current palette from card (yeah, i know its slow)
mov ecx,number_of_colours*3
xor al,al
call _get_palette
mov edi,offset _palette2
jmp _fade_palette
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; _Fade_all: IRQ Fade palette to a common single colour
; In:
; EAX = colour to fade to (xx,rd,gr,bl)
; BH - how much to fade each pel
; BL - how often should fade be applied (1 = very slow)
; Out: null
; Notes: takes control of _irqcontrol2
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_fade_all:
mov _irqcontrol2,offset _ret ; just in case we are already doing a fade
mov _fadestep,ebx
mov ecx,number_of_colours
mov edi,offset _palette1
mov bl,al
shr eax,8
fd_lp:
mov [edi+0],ah
mov [edi+1],al
mov [edi+2],bl
add edi,3
loop fd_lp
mov edi,offset _palette2 ; get current palette from card (yeah, i know its slow)
mov ecx,number_of_colours*3
xor al,al
call _get_palette
mov esi,offset _palette1
mov edi,offset _palette2
mov ebx,_fadestep
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; _Fade_palette: Fade palette from palette ESI to palette EDI
; In:
; ESI - palette to fade to
; EDI - palette to fade from
; BH - how much to fade each pel
; BL - how often should fade be applied (255 = every IRQ)
; Out: null
; Notes: takes control of _irqcontrol2
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_fade_palette:
mov _irqcontrol2,offset _ret ; just in case we are already doing a fade
mov _destpal,edi
mov edi,offset _palette1 ; copy palette to modify into buffer
mov _sourcepal,edi
mov _fadestep,ebx
mov ecx,number_of_colours*3
rep movsb
mov fadecount,0
mov _fadestatus,-1
mov _irqcontrol2,offset irqfade
ret
irqfade:
mov al,b _fadestep
add fadecount,al
jnc no_changeyet
mov esi,_sourcepal
mov edi,_destpal
mov bl,b _fadestep+1
mov ecx,number_of_colours*3
call _slidebytes
jc no_more_fade
cld
mov edx,dac_write_addr
xor al,al
out dx,al
mov esi,_destpal
inc edx
mov ecx,number_of_colours*3
rep outsb
ret
no_more_fade:
mov _irqcontrol2,offset _ret ; kill irq fade call
mov _fadestatus,0
no_changeyet:
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; Wait for fade to complete
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_wait_for_fade:
test _fadestatus,-1 ; wait until fade is complete
jnz _wait_for_fade
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; _GetPal - get current palette from video card
; In:
; EDI - destination location
; AL - start pel
; ECX - number of pels to get (max 768)
; Out: ?
; Notes: Listen, I know this routine is duplicated in xmode.asm but I hate
; stack frames.
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_get_palette:
mov edx, dac_read_addr ; read block of pals
out dx, al
mov edx, pel_data_reg
rep insb ; block read dac registers
ret
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
; _PutPal - put new palette to video card
; In:
; ESI - destination location
; AL - start pel
; ECX - number of pels to write (max 768)
; Out: ?
;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
_put_palette:
mov edx, dac_write_addr
out dx, al
mov edx, pel_data_reg
rep outsb
ret
_default_palette label byte
db 000h,000h,000h,000h,000h,02Ah,000h,02Ah
db 000h,000h,02Ah,02Ah,02Ah,000h,000h,02Ah
db 000h,02Ah,02Ah,02Ah,000h,02Ah,02Ah,02Ah
db 000h,000h,015h,000h,000h,03Fh,000h,02Ah
db 015h,000h,02Ah,03Fh,02Ah,000h,015h,02Ah
db 000h,03Fh,02Ah,02Ah,015h,02Ah,02Ah,03Fh
db 000h,015h,000h,000h,015h,02Ah,000h,03Fh
db 000h,000h,03Fh,02Ah,02Ah,015h,000h,02Ah
db 015h,02Ah,02Ah,03Fh,000h,02Ah,03Fh,02Ah
db 000h,015h,015h,000h,015h,03Fh,000h,03Fh
db 015h,000h,03Fh,03Fh,02Ah,015h,015h,02Ah
db 015h,03Fh,02Ah,03Fh,015h,02Ah,03Fh,03Fh
db 015h,000h,000h,015h,000h,02Ah,015h,02Ah
db 000h,015h,02Ah,02Ah,03Fh,000h,000h,03Fh
db 000h,02Ah,03Fh,02Ah,000h,03Fh,02Ah,02Ah
db 015h,000h,015h,015h,000h,03Fh,015h,02Ah
db 015h,015h,02Ah,03Fh,03Fh,000h,015h,03Fh
db 000h,03Fh,03Fh,02Ah,015h,03Fh,02Ah,03Fh
db 015h,015h,000h,015h,015h,02Ah,015h,03Fh
db 000h,015h,03Fh,02Ah,03Fh,015h,000h,03Fh
db 015h,02Ah,03Fh,03Fh,000h,03Fh,03Fh,02Ah
db 015h,015h,015h,015h,015h,03Fh,015h,03Fh
db 015h,015h,03Fh,03Fh,03Fh,015h,015h,03Fh
db 015h,03Fh,03Fh,03Fh,015h,03Fh,03Fh,03Fh
db 000h,026h,010h,012h,003h,015h,018h,000h
db 000h,000h,00Ah,002h,026h,025h,00Fh,000h
db 001h,02Ah,004h,026h,009h,015h,030h,000h
db 000h,000h,026h,023h,020h,000h,000h,000h
db 006h,005h,029h,000h,000h,000h,009h,030h
db 021h,00Dh,033h,01Ah,026h,018h,003h,030h
db 031h,032h,033h,034h,035h,036h,037h,038h
db 039h,001h,002h,003h,004h,005h,006h,010h
db 013h,011h,012h,017h,03Bh,001h,028h,001h
db 000h,00Bh,010h,039h,008h,000h,000h,000h
db 034h,00Fh,001h,002h,004h,00Ah,002h,024h
db 00Fh,017h,026h,02Bh,022h,034h,01Fh,01Ah
db 019h,01Bh,018h,003h,03Fh,000h,000h,00Ah
db 000h,02Bh,03Dh,018h,000h,000h,000h,039h
db 000h,00Eh,000h,000h,033h,000h,033h,02Bh
db 003h,013h,025h,02Eh,024h,020h,02Dh,025h
db 020h,021h,020h,030h,02Fh,033h,034h,023h
db 021h,032h,024h,021h,00Dh,00Ah,00Dh,00Ah
db 00Ah,02Fh,028h,02Eh,020h,00Dh,023h,003h
db 021h,032h,034h,028h,039h,020h,034h,032h
db 029h,025h,033h,020h,034h,02Fh,020h,022h
db 025h,020h,021h,020h,032h,025h,027h,035h
db 02Ch,021h,032h,020h,02Fh,02Eh,020h,004h
db 029h,027h,029h,034h,021h,02Ch,020h,010h
db 029h,038h,025h,02Ch,03Ah,020h,028h,034h
db 031h,036h,029h,020h,032h,039h,038h,02Dh
db 031h,034h,038h,037h,00Dh,00Ah,020h,020h
db 020h,020h,020h,020h,020h,020h,020h,020h
db 020h,020h,020h,020h,020h,020h,020h,020h
db 020h,020h,020h,020h,020h,020h,020h,020h
db 020h,021h,02Eh,024h,020h,02Fh,02Eh,020h
db 034h,028h,025h,020h,014h,02Fh,032h,02Fh
db 02Eh,034h,02Fh,020h,016h,012h,020h,013h
db 009h,007h,03Ah,020h,028h,034h,031h,036h
db 029h,020h,036h,033h,031h,02Dh,036h,036h
db 032h,035h,00Dh,00Ah,00Dh,00Ah,00Fh,032h
db 020h,037h,032h,029h,034h,025h,020h,034h
db 02Fh,020h,034h,028h,029h,033h,020h,021h
db 024h,024h,032h,025h,033h,033h,03Ah,00Dh
db 00Ah,00Dh,00Ah,020h,020h,020h,020h,00Ah
db 02Fh,028h,02Eh,020h,00Dh,023h,003h,021h
db 032h,034h,028h,039h,00Dh,00Ah,020h,020h
db 020h,020h,031h,033h,031h,036h,020h,012h
db 025h,024h,037h,02Fh,02Fh,024h,020h,00Ch
db 021h,02Eh,025h,00Dh,00Ah,020h,020h,020h
db 020h,010h,029h,023h,02Bh,025h,032h,029h
db 02Eh,027h,02Ch,020h,00Fh,02Eh,034h,021h
db 032h,029h,02Fh,02Eh,00Dh,00Ah,020h,020h
db 020h,020h,003h,021h,02Eh,021h,024h,021h
db 02Ch,020h,005h,021h,032h,034h,028h,02Ch
db 020h,00Dh,029h,02Ch,02Bh,039h,020h,017h
db 021h,039h,02Eh,020h,020h,028h,026h,02Fh
db 032h,020h,034h,028h,02Fh,033h,025h,020h
db 02Fh,035h,034h,02Dh,02Fh,026h,02Dh,034h
db 02Fh,037h,02Eh,025h,032h,033h,029h,00Dh
db 00Ah,020h,020h,020h,020h,00Ch,031h,018h
db 020h,031h,003h,035h,00Dh,00Ah,024h,03Eh
db 000h,000h,000h,000h,03Fh,001h,00Fh,001h
db 030h,000h,039h,003h,000h,003h,000h,03Ch
db 001h,00Ch,001h,030h,000h,01Ch,000h,03Ch
db 00Eh,000h,004h,000h,031h,001h,037h,001h
db 030h,000h,03Dh,010h,000h,006h,000h,02Fh
db 001h,035h,001h,000h,000h,000h,03Fh,023h
db 000h,00Dh,000h,00Eh,033h,004h,020h,016h
db 025h,023h,034h,02Fh,032h,033h,020h,029h
db 02Eh,020h,033h,032h,030h,038h,034h,030h
db 030h,020h,00Dh,02Fh,024h,025h,02Dh,018h
db 03Bh,03Fh,00Fh,000h,030h,001h,00Eh,016h
db 025h,023h,034h,02Fh,032h,020h,012h,02Fh
db 035h,034h,029h,02Eh,025h,033h,020h,022h
db 039h,020h,00Ah,02Fh,028h,02Eh,020h,00Dh
db 023h,003h,021h,032h,034h,028h,039h,03Fh